home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / seyon / SeTrans.c < prev    next >
C/C++ Source or Header  |  1995-05-03  |  5KB  |  223 lines

  1.  
  2. /*
  3.  * This file is part of the Seyon, Copyright (c) 1992-1993 by Muhammad M.
  4.  * Saggaf. All rights reserved.
  5.  *
  6.  * See the file COPYING (1-COPYING) or the manual page seyon(1) for a full
  7.  * statement of rights and permissions for this program.
  8. */
  9.  
  10. #include <X11/Intrinsic.h>
  11. #include <X11/StringDefs.h>
  12. #include <X11/Xaw/Dialog.h>
  13. #include <X11/Xaw/Viewport.h>
  14. #include "MultiList.h"
  15.  
  16. #include <math.h>
  17.  
  18. #include "seyon.h"
  19. #include "SeDecl.h"
  20.  
  21. int             ReadParseProtFile();
  22. void            DoTransfer(),
  23.                 DoUpload(),
  24.                 exec_upload(),
  25.                 ReReadProtFile(),
  26.                 SeTransfer();
  27.  
  28. struct _protItem {
  29.   char            name[LIT_BUF];
  30.   char            command[REG_BUF];
  31.   Boolean         reqName;
  32. };
  33.  
  34. struct _protItem *protItems[MAX_ENT];
  35. XfwfMultiListWidget mlw;
  36. int             transCurItemIndex;
  37.  
  38. void
  39. TopTransfer(widget, clientData)
  40.      Widget          widget;
  41.      XtPointer       clientData;
  42. {
  43.   void            EditFile();
  44.  
  45.   Widget          popup, mBox, uBox, lBox,
  46.                   view,
  47.                   list;
  48.   static char     protocolsFile[REG_BUF];
  49.   static String   disItems[MAX_ENT + 1] = {NULL};
  50.  
  51.   ErrorIfBusy();
  52.  
  53.   if (disItems[0] == NULL) {
  54.     strcpy(protocolsFile, qres.protocolsFile);
  55.     if (ReadParseProtFile(protocolsFile, disItems) < 0)
  56.       return;
  57.   }
  58.  
  59.   popup = AddSimplePopup("transfer", widget);
  60.   mBox = SeAddPaned("mBox", popup);
  61.   uBox = AddBox("uBox", mBox);
  62.   lBox = AddBox("lBox", mBox);
  63.  
  64.   view = XtCreateManagedWidget("view", viewportWidgetClass, uBox, NULL, 0);
  65.   list = XtVaCreateManagedWidget("list", xfwfMultiListWidgetClass, view, 
  66.                                  XtNlist, disItems, XtNmaxSelectable, 1, NULL);
  67.   mlw = (XfwfMultiListWidget) list;
  68.   SeSetViewportDimFromList(view, list, 10);
  69.   XtAddCallback(list, XtNcallback, DoTransfer, clientData);
  70.  
  71.   AddButton("dismiss", lBox, DestroyShell, NULL);
  72.   AddButton("ok", lBox, DoTransfer,  clientData);
  73.   AddButton("edit", lBox, EditFile, (XtPointer)protocolsFile);
  74.   AddButton("reread", lBox, ReReadProtFile,    (XtPointer)disItems);
  75.  
  76.   if (clientData) DoTransfer(list, clientData, NULL);
  77.   else PopupCentered(popup, widget);
  78. }
  79.  
  80. char            lastUploadFile[REG_BUF];
  81.  
  82. void
  83. DoTransfer(widget, clientData, callData)
  84.      Widget          widget;
  85.      XtPointer       clientData,
  86.                      callData;
  87. {
  88.   XfwfMultiListReturnStruct *item;
  89.   Widget          popup;
  90.   String*         actionData = (String*)clientData;
  91.   char            fullCommand[LRG_BUF];
  92.  
  93.   if (clientData)
  94.     {if ((transCurItemIndex = atoi(actionData[0]) - 1) < 0 ||  
  95.          transCurItemIndex > MAX_ENT - 1)
  96.        SimpleError("Invalid Entry Number");}
  97.   else {
  98.     if ((item = XfwfMultiListGetHighlighted(mlw))->num_selected == 0)
  99.       SimpleError("No Item Selected");
  100.     transCurItemIndex =  item->selected_items[0];
  101.   }
  102.   
  103.   strcpy(fullCommand, protItems[transCurItemIndex]->command);
  104.  
  105.   if (protItems[transCurItemIndex]->reqName)
  106.     if (actionData == NULL ||  actionData[1] == NULL) {
  107.       popup = GetShell(PopupDialogGetValue("upload", widget, exec_upload, 
  108.                                            NULL, lastUploadFile));
  109.       PopupCentered(popup, (clientData) ? XtParent(GetShell(widget)) : widget);
  110.       return;
  111.     }
  112.     else
  113.       strcat(strcat(fullCommand, " "), actionData[1]);
  114.   
  115.   DestroyShell(widget);
  116.   ShellCommand(fullCommand);
  117. }
  118.  
  119. void
  120. ReReadProtFile(widget, disItems)
  121.      Widget          widget;
  122.      XtPointer       disItems[];
  123. {
  124.   Widget          protWidget = XtParent(GetShell(widget));
  125.  
  126.   FreeList(disItems);
  127.   DestroyShell(widget);
  128.   TopTransfer(protWidget, NULL);
  129. }
  130.  
  131. void
  132. exec_upload(widget)
  133.      Widget          widget;
  134. {
  135.   Widget          dialog = XtParent(widget);
  136.   static char     cmd[REG_BUF];
  137.  
  138.   strcpy(lastUploadFile, XawDialogGetValueString(dialog));
  139.   sprintf(cmd, "%s %s", protItems[transCurItemIndex]->command,
  140.       lastUploadFile);
  141.  
  142.   DestroyShell(XtParent(GetShell(widget)));
  143.   ShellCommand(cmd);
  144. }
  145.  
  146. void
  147. upload_acc_ok(widget)
  148.      Widget          widget;
  149. {
  150.   exec_upload(widget);
  151. }
  152.  
  153. void
  154. DoShellCommand(widget, command)
  155.      Widget          widget;
  156.      XtPointer       command;
  157. {
  158.   ShellCommand((String)command);
  159. }
  160.  
  161. void
  162. TopShell(widget)
  163.      Widget          widget;
  164. {
  165.   void  GetValueByPopup();
  166.   ErrorIfBusy();
  167.   GetValueByPopup(widget, "shellCommand", DoShellCommand);
  168. }
  169.  
  170. int
  171. ReadParseProtFile(fname, disItems)
  172.      String          fname;
  173.      String          disItems[];
  174. {
  175.   FILE           *fp;
  176.   String          rawItems[MAX_ENT + 1];
  177.   char           *buf,
  178.                   reqName[10];
  179.   int             i,
  180.                   n;
  181.  
  182.   if ((fp = open_file(fname, qres.defaultDirectory)) == NULL)
  183.     return -1;
  184.  
  185.   ReadCommentedFile(fp, rawItems);
  186.   fclose(fp);
  187.  
  188.   FreeList(protItems);
  189.   for (i = 0; (buf = rawItems[i]); i++) {
  190.     /*
  191.      * allocate the record
  192.      */
  193.     protItems[i] = XtNew(struct _protItem);
  194.     /*
  195.      * find the name
  196.      */
  197.     GetWord(buf, protItems[i]->name);
  198.     /*
  199.      * find the command
  200.      */
  201.     GetWord(lptr, protItems[i]->command);
  202.     /*
  203.      * find other stuff
  204.      */
  205.     GetWord(lptr, reqName);
  206.     if (reqName[0] == 'y' || reqName[0] == 'Y')
  207.       protItems[i]->reqName = True;
  208.     else
  209.       protItems[i]->reqName = False;
  210.   }
  211.   protItems[i] = (struct _protItem *)NULL;
  212.  
  213.   FreeList(rawItems);
  214.   FreeList(disItems);
  215.  
  216.   for (n = 0; n < i; n++)
  217.     disItems[n] = XtNewString(protItems[n]->name);
  218.  
  219.   disItems[n] = NULL;
  220.  
  221.   return 0;
  222. }
  223.